# coding=utf-8
"""
	author: 董新强
	日期: 2016-01-22
	该类为http返回的消息模型
	status 状态码 int类型  0 成功  1或其他数字表示失败
	msg		状态描述
	data	实际消息体
"""
from enums.enum_error_type import EnumErrorType


class ResponseMessage():
    def __init__(self, msg, data, status):
        self.msg = msg
        self.data = data
        self.status = status

    def is_ok(self):
        return self.status is not None and self.status == 1

    def responseMsg(self):
        pass


class ok(ResponseMessage):
    """
    该类为http返回的消息模型
    status 状态码 int类型  1 成功  0或其他数字表示失败
    msg		状态描述
    data	实际消息体
    """

    def __init__(self, msg='成功', data=None):
        super().__init__(msg, data, 1)

    def responseMsg(self):
        return {
            'status': 1,
            'msg': self.msg,
            'data': self.data,
            'code': ''
        }


class failure(ResponseMessage):
    @staticmethod
    def listType():
        return []

    def __init__(self, msg='失败', data=None, error_type=EnumErrorType.common):
        super().__init__(msg, data, 0)

        if isinstance(error_type, EnumErrorType):
            self.error_type = error_type.value
        else:
            self.error_type = str(error_type)

    def responseMsg(self):
        if self.status == 1:  # failure不允许返回 1
            return {'status': 0, 'msg': self.msg, 'data': self.data, 'code': self.error_type}

        if self.error_type == EnumErrorType.common.value:  # 一般错误就不提示错误编码了
            return {'status': self.status, 'msg': self.msg, 'data': self.data, 'code': self.error_type}

        return {
            'status': self.status,
            'msg': self.msg + '(错误代码:%s)' % (self.error_type),
            'data': self.data,
            'code': self.error_type
        }

    def set_status(self, status):
        if status == 1:
            return
        self.status = status
